#ifndef __FACTORY_H__
#define __FACTORY_H__
#include "head.h"
#include "work_que.h"
#define SALT_LEN 8
typedef struct{
    int opt;
    int len;
    char arg[1024];
}optdata;
//子线程对应结构体
typedef struct{
    que_t que;
    pthread_t *pthid;//指向线程id数组的指针
    pthread_cond_t cond;
    int threadnum;//线程总数目
    int startflag;//标记是否启动:0:start;1:end
    char homepath[256];//用于保存存储用户文件的文件夹的路径
    MYSQL *conn;
}factory_t,*pfactory_t;
typedef struct{
    int datalen;//存储发送的数据长度
    char buf[1024];
}train_t;//数据火车
/*
//全局变量，这两个参数是固定的，用于创建新的socket文件描述符
char ip[20] = {0};
char port[10] = {0};
*/
//初始化服务器
int server_init(int*,pfactory_t);
//初始化线程池工厂
int factory_init(factory_t*,int,int);
int factory_start(pfactory_t);
void *threadfunc(void*);
int tcp_init(int*);
//执行命令，出错均返回-1
int get_command(MYSQL*,pnode_t);
int do_cd(MYSQL*,int,char*,pnode_t);
int do_ls(MYSQL*,int,pnode_t);
int do_puts(MYSQL*,int,char*,pnode_t);
int do_gets(MYSQL*,int,char*,pnode_t);
int do_remove(MYSQL*,int,char*,pnode_t);
int do_pwd(MYSQL*,int,pnode_t);
int do_mkdir(MYSQL*,int,char*,pnode_t);
//sql系列函数
int sql_init(MYSQL*);
int sql_query(MYSQL*,MYSQL_RES **,char*,unsigned int*);
int sql_insert(MYSQL*,char*);
int sql_delete(MYSQL*,char*);
int sql_update(MYSQL*,char*);
int enroll(MYSQL*,pnode_t);
int login(MYSQL*,pnode_t);
int wrlog(MYSQL*,int,char*,pnode_t);
int trans_file(int,int);
int recv_file(int,char*,pnode_t,off_t);
int recvcycle(int,void*,int);
#endif
